{
gint len;
GtkText *text = gtk_entry_get_text_widget (GTK_ENTRY (completion->entry));
+ GtkEntryBuffer *buffer = gtk_text_get_buffer (text);
if (completion->changed_id > 0)
g_signal_handler_block (text, completion->changed_id);
if (completion->insert_text_id > 0)
- g_signal_handler_block (text, completion->insert_text_id);
+ g_signal_handler_block (buffer, completion->insert_text_id);
gtk_editable_set_text (GTK_EDITABLE (completion->entry), new_text);
- len = strlen (completion->completion_prefix);
+ len = g_utf8_strlen (completion->completion_prefix, -1);
gtk_editable_select_region (GTK_EDITABLE (completion->entry), len, -1);
if (completion->changed_id > 0)
g_signal_handler_unblock (text, completion->changed_id);
if (completion->insert_text_id > 0)
- g_signal_handler_unblock (text, completion->insert_text_id);
+ g_signal_handler_unblock (buffer, completion->insert_text_id);
}
static gboolean
gboolean done;
gchar *prefix;
GtkText *text = gtk_entry_get_text_widget (GTK_ENTRY (completion->entry));
+ GtkEntryBuffer *buffer = gtk_text_get_buffer (text);
if (completion->insert_text_id > 0)
- g_signal_handler_block (text, completion->insert_text_id);
+ g_signal_handler_block (buffer, completion->insert_text_id);
prefix = gtk_entry_completion_compute_prefix (completion,
gtk_editable_get_text (GTK_EDITABLE (completion->entry)));
}
if (completion->insert_text_id > 0)
- g_signal_handler_unblock (text, completion->insert_text_id);
+ g_signal_handler_unblock (buffer, completion->insert_text_id);
}
/**
keypress_completion_out:
if (completion->inline_selection)
- {
- g_free (completion->completion_prefix);
- completion->completion_prefix = NULL;
- }
+ g_clear_pointer (&completion->completion_prefix, g_free);
return retval;
}
gtk_entry_reset_im_context (GTK_ENTRY (widget));
_gtk_entry_completion_popdown (completion);
- g_free (completion->completion_prefix);
- completion->completion_prefix = NULL;
+ g_clear_pointer (&completion->completion_prefix, g_free);
return FALSE;
}
retval = FALSE;
}
- g_free (completion->completion_prefix);
- completion->completion_prefix = NULL;
+ g_clear_pointer (&completion->completion_prefix, g_free);
return retval;
}
+ g_clear_pointer (&completion->completion_prefix, g_free);
+
return FALSE;
}
}
static void
-completion_insert_text_callback (GtkText *entry,
- const gchar *text,
- gint length,
- gint position,
- GtkEntryCompletion *completion)
+completion_inserted_text_callback (GtkEntryBuffer *buffer,
+ guint position,
+ const char *text,
+ guint length,
+ GtkEntryCompletion *completion)
{
if (!completion->inline_completion)
return;
{
GtkEventController *controller;
GtkText *text = gtk_entry_get_text_widget (GTK_ENTRY (completion->entry));
+ GtkEntryBuffer *buffer = gtk_text_get_buffer (text);
controller = completion->entry_key_controller = gtk_event_controller_key_new ();
gtk_event_controller_set_name (controller, "gtk-entry-completion");
completion->changed_id =
g_signal_connect (text, "changed", G_CALLBACK (gtk_entry_completion_changed), completion);
- completion->insert_text_id =
- g_signal_connect (text, "insert-text", G_CALLBACK (completion_insert_text_callback), completion);
- g_signal_connect (text, "notify", G_CALLBACK (clear_completion_callback), completion);
- g_signal_connect_swapped (text, "activate", G_CALLBACK (accept_completion_callback), completion);
+ completion->insert_text_id =
+ g_signal_connect (buffer, "inserted-text", G_CALLBACK (completion_inserted_text_callback), completion);
+ g_signal_connect (text, "notify", G_CALLBACK (clear_completion_callback), completion);
+ g_signal_connect_swapped (text, "activate", G_CALLBACK (accept_completion_callback), completion);
}
static void
disconnect_completion_signals (GtkEntryCompletion *completion)
{
GtkText *text = gtk_entry_get_text_widget (GTK_ENTRY (completion->entry));
+ GtkEntryBuffer *buffer = gtk_text_get_buffer (text);
gtk_widget_remove_controller (GTK_WIDGET (text), completion->entry_key_controller);
gtk_widget_remove_controller (GTK_WIDGET (text), completion->entry_focus_controller);
completion->changed_id = 0;
}
if (completion->insert_text_id > 0 &&
- g_signal_handler_is_connected (text, completion->insert_text_id))
+ g_signal_handler_is_connected (buffer, completion->insert_text_id))
{
- g_signal_handler_disconnect (text, completion->insert_text_id);
+ g_signal_handler_disconnect (buffer, completion->insert_text_id);
completion->insert_text_id = 0;
}
- g_signal_handlers_disconnect_by_func (text, G_CALLBACK (completion_insert_text_callback), completion);
g_signal_handlers_disconnect_by_func (text, G_CALLBACK (clear_completion_callback), completion);
g_signal_handlers_disconnect_by_func (text, G_CALLBACK (accept_completion_callback), completion);
}